package org.example.service;

import org.example.DAO.ReviewDao;
import org.example.entity.Reply;
import org.example.entity.Review;
import org.example.impl.ReviewDaoImpl;
import org.example.Util.DataSourceUtil;

import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.List;

public class ReviewService {
    private final ReviewDao reviewDao;

    public ReviewService() {
        DataSource dataSource = DataSourceUtil.getDataSource();
        this.reviewDao = new ReviewDaoImpl(dataSource);
    }

    /**
     * 获取内容的评论数量
     * @param contentId 内容ID
     * @param contentType 内容类型
     * @return 评论数量
     * @throws SQLException 数据库异常
     */
    public int getReviewCount(int contentId, String contentType) throws SQLException {
        return reviewDao.getReviewCountByContent(contentId, contentType);
    }

    /**
     * 获取用户对特定内容的评论
     * @param userId 用户ID
     * @param contentId 内容ID
     * @param contentType 内容类型
     * @return 评论对象，如果不存在返回null
     * @throws SQLException 数据库异常
     */
    public Review getReviewByUserAndContent(int userId, int contentId, String contentType) throws SQLException {
        return reviewDao.getReviewByUserAndContent(userId, contentId, contentType);
    }

    /**
     * 添加评论
     * @param review 评论对象
     * @return 是否成功
     * @throws SQLException 数据库异常
     */
    public boolean addReview(Review review) throws SQLException {
        return reviewDao.addReview(review);
    }

    /**
     * 更新评论
     * @param review 评论对象
     * @return 是否成功
     * @throws SQLException 数据库异常
     */
    public boolean updateReview(Review review) throws SQLException {
        return reviewDao.updateReview(review);
    }

    /**
     * 获取内容的所有评论
     * @param contentId 内容ID
     * @param contentType 内容类型
     * @return 评论列表
     * @throws SQLException 数据库异常
     */
    public List<Review> getReviewsByContent(int contentId, String contentType) throws SQLException {
        return reviewDao.getReviewsByContent(contentId, contentType);
    }

    /**
     * 删除评论
     * @param reviewId 评论ID
     * @return 是否成功
     * @throws SQLException 数据库异常
     */
    public boolean deleteReview(int reviewId) throws SQLException {
        return reviewDao.deleteReview(reviewId);
    }
    /**
     * 获取用户的所有评论（分页）
     * @param userId 用户ID
     * @param page 当前页码
     * @param pageSize 每页数量
     * @return 评论列表
     * @throws SQLException 数据库异常
     */
    public List<Review> getReviewsByUser(int userId, int page, int pageSize) throws SQLException {
        int offset = (page - 1) * pageSize;
        return reviewDao.getReviewsByUser(userId, offset, pageSize);
    }

    /**
     * 获取用户的评论总数
     * @param userId 用户ID
     * @return 评论数量
     * @throws SQLException 数据库异常
     */
    public int getReviewCountByUser(int userId) throws SQLException {
        return reviewDao.getReviewCountByUser(userId);
    }
    /**
     * 检查用户是否有权限删除评论
     * @param userId 用户ID
     * @param reviewId 评论ID
     * @return 是否有权限
     * @throws SQLException 数据库异常
     */
    public boolean canUserDeleteReview(int userId, int reviewId) throws SQLException {

        // 普通用户只能删除自己的评论
        Review review = reviewDao.getReviewById(reviewId);
        return review != null && review.getUserId() == userId;
    }

    public Review getReviewById(int reviewId) throws SQLException {
        return reviewDao.getReviewById(reviewId);
    }



    public boolean addReply(Reply reply) throws SQLException {
        return reviewDao.addReply(reply);
    }

    public List<Reply> getRepliesByReview(int reviewId) throws SQLException {
        return reviewDao.getRepliesByReview(reviewId);
    }



}
